﻿using System.Windows;
using System.Windows.Input;
using System.Windows.Media;

namespace DrawTools.Tools
{
    /// <summary>
    /// 绘制工具接口
    /// </summary>
    public interface IDrawTool
    {
        /// <summary>
        /// 是否显示索引号
        /// </summary>
        bool ShowIndex { get; set; }
        /// <summary>
        /// 序号
        /// </summary>
        int Index { get; set; } 
        /// <summary>
        /// 文本
        /// </summary>
        string Text { get; set; }

        /// <summary>
        /// 触摸Id，用于分辨多点触摸，0表示鼠标
        /// </summary>
        int TouchId { get; }

        /// <summary>
        /// 是否可以处理鼠标进入事件
        /// </summary>
        bool CanTouchEnter { get; }

        /// <summary>
        /// 处理鼠标进入事件
        /// </summary>
        /// <param name="point">相对画布的点</param>
        /// <returns>事件是否已处理</returns>
        bool OnTouchEnter(Point point);

        /// <summary>
        /// 是否可以处理鼠标离开事件
        /// </summary>
        bool CanTouchLeave { get; }

        /// <summary>
        /// 处理鼠标离开事件
        /// </summary>
        /// <param name="point">相对画布的点</param>
        /// <param name="isLeaved">是否退出画图</param>
        /// <returns>事件是否已处理</returns>
        bool OnTouchLeave(Point point, bool isLeaved = false);

        /// <summary>
        /// 是否可以处理鼠标按下事件
        /// </summary>
        bool CanTouchDown { get; }

        /// <summary>
        /// 执行鼠标按下事件
        /// </summary>
        /// <param name="touchId">触摸Id，用于分辨多点触摸，0表示鼠标</param>
        /// <param name="point">相对画布的点</param>
        /// <returns>事件是否已处理</returns>
        bool OnTouchDown(int touchId, Point point);

        /// <summary>
        /// 是否可以处理鼠标移动事件
        /// </summary>
        bool CanTouchMove { get; }

        /// <summary>
        /// 执行鼠标移动事件
        /// </summary>
        /// <param name="point">相对画布的点</param>
        /// <returns>事件是否已处理</returns>
        bool OnTouchMove(Point point);

        /// <summary>
        /// 是否可以处理鼠标弹起事件
        /// </summary>
        bool CanTouchUp { get; }

        /// <summary>
        /// 执行鼠标弹起事件
        /// </summary>
        /// <param name="point">相对画布的点</param>
        /// <returns>事件是否已处理</returns>
        bool OnTouchUp(Point point);

        /// <summary>
        /// 是否可以处理键盘按下事件
        /// </summary>
        bool CanKeyDown { get; }

        /// <summary>
        /// 处理键盘按下事件
        /// </summary>
        /// <param name="key"></param>
        /// <returns>事件是否已处理</returns>
        bool OnKeyDown(Key key);

        /// <summary>
        /// 是否可以处理键盘弹起事件
        /// </summary>
        bool CanKeyUp { get; }

        /// <summary>
        /// 处理键盘弹起事件
        /// </summary>
        /// <param name="key"></param>
        /// <returns>事件是否已处理</returns>
        bool OnKeyUp(Key key);

        /// <summary>
        /// 是否结束
        /// </summary>
        bool IsFinish { get; }

        /// <summary>
        /// 是否有删除点操作
        /// </summary>
        bool HasDelete { get; set; }

        /// <summary>
        /// 画图工具类型
        /// </summary>
        DrawToolType DrawingToolType { get; }
    }
}